草庐IT

c++ - QML Qt openUrlExternally

全部标签

c++ - 函数所需的堆栈空间会影响 C/C++ 中的内联决策吗?

函数所需的大量堆栈空间会阻止它被内联吗?例如,如果我在堆栈上有一个10k的自动缓冲区,是否会降低函数被内联的可能性?intinlineme(intargs){charsvar[10000];returnstringyfunc(args,svar);}我更关心gcc,但icc和llvm也很高兴知道。我知道这并不理想,但我很好奇。代码在缓存上也可能很糟糕。 最佳答案 是的,内联与否取决于函数的复杂性、堆栈和寄存器的使用情况以及进行调用的上下文。这些规则依赖于编译器和目标平台。当性能很重要时,请始终检查生成的程序集。比较thisversi

c++ - 一次从套接字读取 1 个字节与读取大块

在性能方面,每次从套接字读取1个字节与读取大块之间有什么区别?我有一个C++应用程序需要从Web服务器拉取页面并逐行解析接收到的页面。目前,我一次读取1个字节,直到遇到CRLF或达到1024字节的最大值。如果读取大块(例如一次1024字节)在性能方面要好得多,关于如何实现我目前拥有的相同行为的任何想法(即能够一次存储和处理1行html)-直到CRLF还没有消耗后续字节)?编辑:我负担不起太大的缓冲区。由于该应用程序用于嵌入式设备,因此我的代码预算非常紧张。我更喜欢只保留一个固定大小的缓冲区,最好一次保留一个html行。这使我的解析和其他处理变得容易,因为每当我尝试访问缓冲区进行解析时,

c++ - 使用 "template"编写 C 或 C++ 库

(1)。在使用C++模板时,编译器(如g++)不会直接编译模板定义(只能​​在头文件中,不能在源文件中),而是根据模板定义为它的每个实例生成代码,然后为它的实例编译生成的代码?(2)。如果我想编写一个提供模板类和模板函数的C++库,是否无法将库编译为共享文件(.so,.a),因为它们的实例化不会出现在库代码中的任何位置,而只会出现在用户程序?如果是,是否意味着模板库只是源代码文件而不是预编译文件?C++标准模板库(STL)是如何实现的?其源代码是预编译的还是与用户程序一起编译的?(3)。在C中,如何编写一个库来提供像C++中的模板函数一样的函数?重载是一个好的解决方案吗?如果我必须为不

c++ - 为什么必须在运算符重载中提供关键字 const

只是好奇为什么参数在操作重载中必须是常量CVector&CVector::operator=(constCVector¶m){x=param.x;y=param.y;return*this;}难道你不能轻松地完成这样的事情吗??CVector&CVector::operator=(CVector¶m)//noconst{x=param.x;y=param.y;return*this;}不是当某些东西变成常量时,它在应用程序的剩余生命周期中是不可更改的吗??这在操作重载方面有何不同??? 最佳答案 你不需要常量:@nu

c++ - 让老鼠走出迷宫

一只老鼠被放在迷宫中的某个未知位置。我们只能向上、向下、向右或向左移动。我们有两种方法:tryMove()如果有墙则返回false,如果我们可以移动则返回true。boolhasLadder():如果有梯子可以逃脱,则返回true。我们必须编写一个函数explore,如果找到出路则返回true,如果找不到出路则返回false。这是一个简单的图问题,如果我们能找到标记这些地方,就可以使用bfs或dfs算法来解决。如果我们不能标记这些地方,我们可以循环移动访问相同的地方。如果没有标记,有人可以帮我把老鼠从迷宫中弄出来吗?可能吗? 最佳答案

c++ - 使 size_t 和 wchar_t 可移植?

据我了解,size_t和wchar_t的表示完全是特定于平台/编译器的。例如,我读到Linux上的wchar_t现在通常是32位,但在Windows上是16位。有什么方法可以在我自己的代码中将它们标准化为一组大小(int、long等),同时仍然保持与两个平台上现有标准C库和函数的向后可比性?我的目标基本上是做一些类似typedef的事情,使它们成为固定大小。在不破坏某些东西的情况下这可能吗?我应该这样做吗?有没有更好的办法?更新:我想这样做的原因是我的字符串编码在Windows和Linux上都是一致的谢谢! 最佳答案 听起来您正在寻

c++ - 解决 C、C++ 中隐式包含的想法

我刚刚想出了一个解决问题的想法并想分享它。对不起,如果太平庸。因此,我正在审查的一个大型C++项目包含许多依赖于其他包含的符号但不包含所需包含的包含。构建过程中的任何细微变化都会导致“缺少符号”失败。因此,为了立即检查所有包含的自包含,我搜索所有*.h,即时创建一个cpp文件,其中仅包含带有此.h文件的#include-statement并尝试编译它.最后,我获得了“好”和“坏”包含文件的列表。很酷是不是:-)或者有更简单的解决方案吗? 最佳答案 如果每个.cpp文件首先包含它自己的头文件,然后是其他头文件,您将在不使用外部工具的情

c++ - 在 C/C++ 中生成线程的跨平台方式?

在C和C++中是否有产生线程的跨平台方式?像sched_yield()或Sleep(0)这样的东西?在某些实现中,SDL_Delay(0)是否总是屈服或会立即返回? 最佳答案 鉴于C和C++(直至C++98)都没有“线程”,因此没有完全跨平台的方式让线程产生。在C++0x中,有一个函数std::this_thread::yield()可以被调用来yield。一旦人们开始使用C++0x线程库,这将是线程产生的可移植方式。 关于c++-在C/C++中生成线程的跨平台方式?,我们在StackO

c++ - 在 C/C++ 中向指针添加 1 个字节的正确方法是什么?

我现在正在使用这段代码将指针移动1个字节,但我感​​觉有些不清楚..int*a=(int*)malloc(sizeof(int));void*b=((char*)a)+1;char是1个字节,但未定义为字节操作目的。我相信还有另一种方法可以执行此byte操作。byte操作的正确方法是什么?附言。我修改了示例代码以使其有效。它现在使用Clang编译为C++。 最佳答案 我觉得你很困惑:charis1byte,butnotdefinedforbyteoperationpurpose.Ibelievethere'sanotherwayto

c++ - Windows API 图形用户界面设计器?

是否有适用于普通旧WindowsAPI的优秀GUI设计器(阅读:拖放/所见即所得)?我不是在寻找使用Qt、GTK、.NET等的东西,只是寻找普通的旧WindowsAPI。必须可用于C或C++。 最佳答案 您正在寻找资源编辑器。VisualStudioProfessional、Premium和Ultimate在IDE中内置了一个。您可以通过创建一个新的.rc文件然后向其中添加资源来访问它。如果您不使用VisualStudio,则可以使用外部资源编辑器,例如ResEdit。不幸的是,没有将它内置到IDE中有点麻烦。